package modelo;
import java.awt.List;
import java.util.LinkedList;




public class BellasUnias {
	
	private Manicura manicura;
	private Expediente expedientes;
	private LinkedList<Cliente> clientes;
	private int ultimoCodigoCliente;
	private Herramientas tools;
	
	
	public BellasUnias(int matricula,String nombre,String apellido,String direccion,String telefono, String cumpleanos){
		
		this.manicura = new Manicura(matricula);
		this.expedientes = new Expediente();
		this.clientes = new LinkedList<Cliente>();
		this.manicura.cargarDatos(nombre, apellido, direccion, telefono, cumpleanos);
		this.ultimoCodigoCliente = 0;
		this.tools = new Herramientas();
	}
	
	public void setExpediente(Expediente unExpediente){
		
		this.expedientes = unExpediente;
	}
	
	public void setManicura(Manicura unaManicura){
		
		this.manicura = unaManicura;
	}
	
	public Expediente getExpediente(){
		
		return this.expedientes;
	}
	
	public Manicura getManicura(){
		
		return this.manicura;
	}
	
	public boolean existeCliente(int codigo){
		
		for(Cliente unCliente : this.clientes)
	         if (unCliente.getCodigoCliente() == codigo)
	        	  return true;
		
		return false;
	}
	
	public void actulizarCodigoCliente(){
		
		this.ultimoCodigoCliente += 1;
	}
	
	public void desactulizarCodigoCliente(){
		
		this.ultimoCodigoCliente -= 1;
	}
	
	public boolean nuevoCliente(String nombre,String apellido,String direccion,String telefono, String cumpleanos, String comentario){
		
		
			this.actulizarCodigoCliente();
			Cliente nuevoCliente = new Cliente(this.ultimoCodigoCliente);
			if (nuevoCliente.altaCliente(nombre, apellido, direccion, telefono, cumpleanos, comentario)){
					clientes.add(nuevoCliente);
				return true;
			}
				
		this.desactulizarCodigoCliente();		
		return false;
	}
	
		
	public Cliente informacionCliente(int codigo){
		
		if (this.existeCliente(codigo)){
			
			for(Cliente unCliente : this.clientes)
		         if (unCliente.getCodigoCliente() == codigo)
		        	  return unCliente;
			//mostrar informacion de un cliente determinado
		}
		
	 return null;	
		
	}
	
	public LinkedList<Cliente> listadoDeClientes(){
		
		return this.clientes;
	}
	
	public boolean cargarNuevoTrabajo(int codigoCliente, String descripcion, String fechaRealizacion){
		
		Cliente cliente;
		
		//Codigo de cliente Validoo
		if (this.existeCliente(codigoCliente)){
			cliente = this.informacionCliente(codigoCliente);
			return this.expedientes.cargarTrabajo(cliente, descripcion, fechaRealizacion);
		}
		
		return false;
	}
	
	public void cambiarEstadoDeTrabajo(int codigoTrabajo, String comentario){
		
		if (this.expedientes.codigoValido(codigoTrabajo)){
			Trabajo trabajoAcambiar = this.expedientes.obtenerTrabajo(codigoTrabajo);
			trabajoAcambiar.cambiarEstado();
			trabajoAcambiar.setComentarioTrabajoFinalizado(comentario)
;		}
	}
	
	public Trabajo trabajoEnEspecifico(int codigoTrabajo){
		
		if (this.expedientes.codigoValido(codigoTrabajo)){
			
			return this.expedientes.obtenerTrabajo(codigoTrabajo);
		}
		
	return null;	
		
	}
	
	public LinkedList<Trabajo> listadoTrabajos(){
		
		return this.expedientes.getTrabajos();
	}

	public void agregarDescripcionAlCliente(int codigoCliente,String description){
	
		Cliente cliente;
		
		//Codigo de cliente Validoo
		if (this.existeCliente(codigoCliente)){
			cliente = this.informacionCliente(codigoCliente);
			cliente.setDescripcionCliente(description);
			
		}
	}
	
	public LinkedList<Trabajo> proximosTrabajos(){
				
		return this.expedientes.trabajosDeLosProximosDias();
		
	}
	
	public LinkedList<Trabajo> trabajosDeUnDia(String fecha){
		
		return this.expedientes.trabajosDeunaFecha(fecha);
	}
	
	//Modificaciones Del Cliente
	
	public boolean modificarNombreCliente(int codigoCli, String nombre){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setNombre(nombre);
			return true;
		}
		return false;
	
	}
	
	public boolean modificarApellidoCliente(int codigoCli, String apellido){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setApellido(apellido);
			return true;
		}
		return false;
	
	}
	
	public boolean modificarDireccionCliente(int codigoCli, String direccion){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setDireccion(direccion);
			return true;
		}
		return false;
	
	}
	
	public boolean modificarDescripcionCliente(int codigoCli, String descripcion){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setDescripcionCliente(descripcion);
			return true;
		}
		return false;
	
	}
	
	public boolean modificarCumpleanosCliente(int codigoCli, String cumpleanos){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setDescripcionCliente(cumpleanos);
			return true;
		}
		return false;
	
	}
	
	public boolean modificarTelefonoCliente(int codigoCli, String telefono){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setTelefono(telefono);
			return true;
		}
		return false;
	
	}
	
	//Asignar Turno a un Cliente
	
	public boolean setTurnoAcliente(int codigoCli, String fecha){
		
		if (this.existeCliente(codigoCli) & tools.isDate(fecha)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setProximaVisita(fecha);
			return true;
		}
		return false;
	}
	
	//DesasignarTurnoCliente
	
	public boolean desasignarTurnoAcliente(int codigoCli){
		
		if (this.existeCliente(codigoCli)){
			Cliente unCliente =this.informacionCliente(codigoCli);
			unCliente.setProximaVisita(" ");
			return true;
		}
		return false;
	}
	
	
	//Modificaciones Trabajo
	public boolean modificarFechaRealizacion(int codigo,String fecha){
		
		if(this.trabajoEnEspecifico(codigo) == null || !tools.isDate(fecha)){
			return false;
		}
		
		this.trabajoEnEspecifico(codigo).setFechaRealizacion(fecha);
		return true;
	}
	
	//Eliminar Cliente
	
	 public boolean eliminarCliente(int codigo){
		 
		if (this.existeCliente(codigo)){
			for(Cliente cliente: this.clientes)
					if (cliente.getCodigoCliente() == codigo){
						this.expedientes.removerTrabajosDeUnCliente(cliente.getNombre());
						clientes.remove(cliente);
						break;
					}
				
				return true;
		} 
		
		return false;
		 
	 }
	 
	 
	 //Eliminar Trabajos
	 
	 public boolean eliminarTrabajo(int codigo){
		 
		 if (this.expedientes.existeTrabajo(codigo)){
			  this.expedientes.removerTrabajo(codigo);
		 	 return true;
	 }
	 
	 return false;
	 }
	 
	 
	
	
}
